-
18 votes
-
The best game animation of 2023
3 votes -
Vectrex reborn: How a chance encounter gave new life to a dead console
4 votes -
This game console has no pixels. The Vectrex from 1982.
20 votes -
Why Cities: Skylines II performs poorly – the teeth are not the only problem
23 votes -
Alan Wake II PC path tracing: The next level in visual fidelity?
11 votes -
Unreal Engine 5 first generation games: brilliant visuals & growing pains
11 votes -
Head tracking for desktop VR displays using the WiiRemote (2007)
6 votes -
The Diorama Engine (from Diora, a Playdate game)
9 votes -
What game, in your opinion, has the best graphics?
Completely ignoring gameplay, which game do you think has the most amazing graphics? Which game do you look at and it makes you question how far technology has come? Or maybe which game has such...
Completely ignoring gameplay, which game do you think has the most amazing graphics? Which game do you look at and it makes you question how far technology has come? Or maybe which game has such effective art direction it completely sucks you in?
For me, it's Horizon Forbidden West. I just went back to the DLC after taking a break from it. I forgot just how good it looks! I swear it looks like every grain of sand is modeled, and the character models are insane.
20 votes -
Help with finding out more about an obsure c++ graphics library
I recently started classes again a little over a week ago. One of the classes I am taking is Computer science 2. One of the things it includes is openGL based graphics programming. They have us...
I recently started classes again a little over a week ago. One of the classes I am taking is Computer science 2. One of the things it includes is openGL based graphics programming. They have us using glut, which is not bad in it self. However what they do is provide us a wrapper library for glut. In the form of a header named "graph1.h" and a precompiled library. Which goes by various names, such as "graphLib1.lib", "graphLib2010.lib", "graphLib2022.lib", "graphicLib2015.lib", etc. It's provided in the form of Windows flavored x86, Macos flavored x86_64 and arm. However, no forms for Linux. While I have been using Windows and VS Studio for classes so far, I strongly prefer my current Linux based tool chain. (text editor, build system, debugger). I have tried cross compiling with mingw-w64, but it fails when I try to link it. I would very much like to use it natively. To do this I would need either the library or the sources to compile it myself. That is what I would really like to find.
Here is more about the library it self. It is based off of BMPLoader, a small library for loading bitmaps as openGL textures. It also inherits its license from BMPLoader too, because it is a derivative of BMPLoader. (GPLv2; and has been distributed). When you unpack the library there are 3 object files, BMPLoader.o, loadPNG.o, and example2.o. (.o/.obj) I have found traces of it online, however they all link back to my University, University of Central Arkansas. I have also found evidence of it being used at GSU too, but it is from one of the professors that is now here at UCA. (They even provided a pdf on using it, I hashed them and they were the same). Here is a copy of the header graph1.h.
graph1.h
/*BMPLoader - loads Microsoft .bmp format Copyright (C) 2006 Chris Backhouse This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. cjbackhouse@hotmail.com www.backhouse.tk I would appreciate it if anyone using this in something cool would tell me so I can see where it ends up. Takes a filename, returns an array of RGB pixel data Loads: 24bit bitmaps 256 colour bitmaps 16 colour bitmaps 2 colour bitmaps (Thanks to Charles Rabier) This code is designed for use in openGL programs, so bitmaps not correctly padded will not load properly, I believe this only applies to: 256cols if width is not a multiple of 4 16cols if width is not a multiple of 8 2cols if width is not a multiple of 32 Sample code: BMPClass bmp; BMPLoad(fname,bmp); glTexImage2D(GL_TEXTURE_2D,0,3,bmp.width,bmp.height,0,GL_RGB,GL_UNSIGNED_BYTE,bmp.bytes); */ #include <windows.h> #include <gl/glut.h> #include <iostream> #include <cstring> #include <string> #define endg "_endg_" #ifndef BMPLOADER_H #define BMPLOADER_H #include <iostream> #include <cstring> using namespace std; typedef unsigned char BYTE; class BMPClass { public: BMPClass(); ~BMPClass(); BYTE& pixel(int x,int y,int c); void allocateMem(); int width,height; BYTE* bytes; //OpenGL formatted pixels }; #define BMPError char #define BMPNOTABITMAP 'b' //Possible error flags #define BMPNOOPEN 'o' #define BMPFILEERROR 'f' #define BMPBADINT 'i' #define BMPNOERROR '\0' #define BMPUNKNOWNFORMAT 'u' //Loads the bmp in fname, and puts the data in bmp BMPError BMPLoad(string fname,BMPClass& bmp); //Translates my error codes into English std::string TranslateBMPError(BMPError err); //Load and select in OpenGL BMPError BMPLoadGL(string fname); struct Precision { int precision; bool precisionFlag; }; struct GraphColor { int r; int g; int b; }; class Gout { private: int x; int y; int r; int g; int b; int precision; bool precisionFlag; public: Gout() { r= 0; g=255; b= 0; precisionFlag = false; }; void setX(int x) { this->x = x;} void setY(int y) { this->y = y;} int getX() { return x;} int getY() { return y;} void setR(int r) {this->r = r;} void setG(int g) {this->g = g;} void setB(int b) {this->b = b;} int getR() {return r;} int getG() { return g;} int getB() {return b;} void setPrecisionFlag(bool flag) { precisionFlag = flag;} bool getPrecisionFlag() {return precisionFlag;} void setPrecision(int precision) {this->precision = precision;} int getPrecision() {return precision;} friend Gout& operator<<(Gout& g, int int_val); friend Gout& operator<<(Gout& g, double int_val); friend Gout& operator<<(Gout& g, char* char_val); friend Gout& operator<<(Gout& g, string string_val); }; extern Gout gout; struct Point { int x; int y; }; struct GraphObject { char* str; int id; int no_points; Point* points; double* colors; int radius; int no_objects; BMPClass* bmp; int remove; int width; int height; int del; BYTE* bytes; //PNG BYTES }; void reshape(int w, int h); void display(void); void init(char* title); int drawPoint(int x, int y); int drawCircle(int radius, int x, int y); void drawMyCircle( int Radius, int numPoints, int x, int y ); int drawLine(int x1, int y1, int x2, int y2, int width); int drawRect(int x1, int y1, int width, int height); void displayGraphics(); int displayBMP(char* fn,int x, int y); int displayBMP(string fn, int x, int y); int displayPNG(string fn, int x, int y); int displayPNG(char* fn, int x, int y); int displayText(char* str, int x, int y, int r, int g, int b); void clearGraphics(); void setColor(int obj_no, int r, int g, int b); GraphColor setColor(int r, int g, int b); void timerColor(int value); void moveObject(int obj_no, int x, int y); void processSpecialKeys(int key, int x, int y); DWORD WINAPI display1(LPVOID lpParam); void processMouse(int button, int state, int x, int y); void removeObject(int id); void clearText(); void GRAPH_SS(); bool up(); bool down(); bool left(); bool right(); bool leftMouse(int&x, int&y); bool rightMouse(int&x, int&y); bool middleMouse(int&x, int&y); Gout& operator<<(Gout& g, int int_val); Gout& operator<<(Gout& g, double int_val); Gout& operator<<(Gout& g, char* char_val); Gout& operator<<(Gout& g, char char_val); Gout& operator<<(Gout& g, Gout&(*pt2Func)(int x, int y)); Gout& operator<<(Gout& g, Gout&(*pt2Func)(int r, int g, int b)); Gout& operator<<(Gout& g, Point a); Gout& operator<<(Gout& g, GraphColor gc); Gout& operator<<(Gout& g, Precision p); Gout& operator<<(Gout& g, Gout&(*pt2Func)(int precision)); Precision setPrecision(int precision); Point setPos(int x, int y); void getPos(int obj_no, Point points[], int& no_points); bool mouseDragged(int& x, int& y); void processMouseDragged(int x, int y); void replaceObject(int orig_obj, int new_obj); void closeGraphics(); #endif
Right now I am of the opinion that it is a in-house "hackjob". That is how it feels with the GPLed BMPLoader glued together with other graphics functions. In an attempt to not have to use new literature or new style libraries with the new ".net 2008" style ide, as they were likely transitioning out of a codewarrior environment, and before that a borland environment.
So far, I have asked our computer science club about it. The main thing I was told was that the professor just wants us to use windows. That I can understand, but I still want to see how far I can go. I have also tried sending an email about it to the professor, but all I got sent was a link to the glut downloads. I did reply back asking about the graphlib sources too, but I haven't heard anything back yet. I don't want to push too hard, I still have a whole semester ahead of me. So now I am asking here on tildes. I understand if nothing can be found, but at least information and experiences can be collected.
11 votes -
Sparrow Solitaire for Playdate
16 votes -
Rewriting wipEout
22 votes -
Why the liquids in Half-Life: Alyx look so dang good
34 votes -
Diablo 4 is a great PC port - except you need a 16GB graphics card to match PS5
13 votes -
Digital Foundry Starfield tech breakdown - 30FPS, visuals, rendering tech, and game impressions
20 votes -
I just discovered a free, accountless graphic design web-app, in the vein of Canva and Crello
4 votes -
Use.GPU goes trad
4 votes -
React Native Skia - high performance C++ user interfaces with React
4 votes -
Portal RTX review: This particular release dramatically modernises the Valve classic with all-new assets and a fully path-traced pipeline, transforming the look of the game
18 votes -
EchoSVG: Pure Java SVG renderer with level 4 CSS selectors
2 votes -
Doom Classic: Ray traced | Trailer
11 votes -
New Frame Plus' favorite game animation of 2021
6 votes -
Texture Archaeology, Cobblestone, and the most overused texture from the 90s
5 votes -
How would you write a GUI? Seeking opinions, recommendations, and what to avoid.
Hi all. I am asking this open-ended question (bottom of this post) because I am considering making contributions to an open-source project that would directly benefit me and other users. Some...
Hi all. I am asking this open-ended question (bottom of this post) because I am considering making contributions to an open-source project that would directly benefit me and other users.
Some background:
I have worked with an engineering simulation software called Ansys MAPDL basically everyday for the last 4 years, in both an academic and a professional capacity. It's not necessarily relevant whether you are familiar to that program to participate in this discussion. The relevant thing is that the GUI for MAPDL is written in Tcl/Tk and I don’t imagine it is going to be modernized (because of more modern, but distinctly different, replacements). This is a screenshot of the GUI for reference.
Why do people put up with such an old interface?
The power of the program is not its GUI, but the scripting language that can be run to setup and solve simulations. The program name is really the scripting language name, Ansys Parametric Design Language (APDL). It's somewhat like Matlab. The program also offers an enormous amount of control when compared to the more modern GUI that's been released, since the modern GUI holds a totally different philosophy.
The older GUI is really helpful in certain circumstances because it will spit out a file containing commands that were used in the session. This is a great demonstration of how to run a command or use a setting/config command, but a lot of newer features are buried in the documentation and aren't available in the older GUI.
My coding experience
I know the MAPDL language very intimately, but my experience beyond it is limited to some Perl scripting, and a bit of Python exposure.
Motivation
Open-Source Ansys API
Recently, Ansys started supporting an open-source Python project called PyAnsys. MAPDL is otherwise fully closed source, and this is really the only public-facing API. PyAnsys has basically converted a lot of MAPDL script commands to a pythonic format, hence Python can now be used to interact with MAPDL. This is great for several reasons, but is limited regarding interactivity. Interacting with MAPDL via Python is basically happening in a fancy console via Jupyter notebook or IDE like Spyder. Certain commands will bring up Python-based graphics displays of solid models and results plots, but there isn't a dedicated GUI open all the time.
The Question(s)
My question is whether it is feasible to write a frontend GUI to a bunch of python commands. If you were going to do it, how would you do it? What might you write it with? Would you even do it? Is this a stupid endeavor?
7 votes -
Digital Foundry analysis of the upcoming Metro Exodus Enhanced Edition, the first major game release to require ray-tracing capable graphics hardware
7 votes -
Enough with the red screen of almost-death
6 votes -
Ray tracing performance deep dive: AMD Radeon RX 6800 XT vs. Nvidia GeForce RTX 3080
4 votes -
Digital Foundry's best game graphics of 2020 - PC, Xbox, PlayStation - An amazing year for visuals
6 votes -
Tools for colorizing old photos and enhancing old videos | No Sweat Tech
6 votes -
Demon's Souls remake on PlayStation 5: The Digital Foundry tech review
4 votes -
Inside the Demon's Souls remake on PS5: The Bluepoint technology breakdown
4 votes -
Teardown preview - A voxel ray-traced game on PC with next-generation destruction and physics
19 votes -
The art of code - Dylan Beattie
7 votes -
Good Quality DOSBox Video Capture
5 votes -
Horizon Zero Dawn PC port analysis
6 votes -
Microsoft Flight Simulator PC hands-on: A generational leap in graphical realism
16 votes -
Death Stranding PC tech review
6 votes -
Digital Foundry review of Saints Row The Third Remastered
5 votes -
Making of Impacts – Programming ⋂ Art
6 votes -
SCOPETREX vector gaming on your oscilloscope!
@tubetimeus: announcing the SCOPETREX -- the vector gaming console for your oscilloscope or XY monitor! ever wanted to buy a Vectrex, but can't afford the high prices on auction sites? well now you can build your own! full design files at https://t.co/hHAbFwwePE
4 votes -
Minecraft RTX deep dive: How Nvidia delivered a game-changing ray tracing upgrade
7 votes -
A breakdown and comparison of the animation in the original opening cutscene of Final Fantasy VII and the new version in the remake
5 votes -
Half-Life: Alyx - The Digital Foundry tech review
5 votes -
Animal Crossing: New Horizons - Tech analysis and breakdown
6 votes -
Doom Eternal - The Digital Foundry tech review
8 votes -
Halo Combat Evolved Anniversary PC tech review - analysis of The Master Chief Collection version
9 votes -
The effectiveness of the limited animation in the Phoenix Wright / Ace Attorney series
6 votes -
Video game subtitles could learn a lot from comic book lettering
19 votes -
Ray tracing, VRS, and DLSS in id Tech 6 and Wolfenstein: Youngblood
6 votes