Comments (7)
Can you try now?
from zelda3.
Builds on 32-bit here as well, and cross compiles for 32-bit with MinGW on Linux, but I'd suggest using #ifndef __MINGW32__
instead of #if defined(_MSC_VER)
, since it does compile properly for native 64-bit Linux, as well as cross compiling for 64-bit, and MSYS2 64-bit.
from zelda3.
Did you try the e4febaf commit? works very well to me.
from zelda3.
To compile for 32-bit you need to use the "MSYS2 MinGW 32-bit" shortcut with the gray icon on the start menu and install a few additional packages with: pacman -S mingw-w64-i686-gcc mingw-w64-i686-SDL2 mingw-w64-i686-python-yaml mingw-w64-i686-python3-pillow
The e4febaf commit works for 64-bit, but still has the problem when compiling for 32-bit.
from zelda3.
you are completely right, I just remove all MSYS from my system, Install msys2-x86_64-20220904.exe, then run pacman -Syu
several times until no new installations ocurr and receive there is nothing to do
message.
then I run MINGW32 (grey one) and install the packages:
pacman -Sy --needed --noconfirm git make mingw-w64-x86_64-python mingw-w64-i686-python3-pillow mingw-w64-i686-python-yaml mingw-w64-i686-gcc mingw-w64-i686-SDL2 mingw-w64-x86_64-SDL2
then copy the ROM to ~/zelda3/tables/zelda3.sfc
Then on Zelda3 folder run make -j$(nproc)
and the result is:
Impeeza@Titan MINGW32 ~/zelda3
$ make clean ; make -j$(nproc)
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 ancilla.c -o ancilla.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 attract.c -o attract.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 audio.c -o audio.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 config.c -o config.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 dungeon.c -o dungeon.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 ending.c -o ending.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 glsl_shader.c -o glsl_shader.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 hud.c -o hud.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 load_gfx.c -o load_gfx.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 main.c -o main.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 messaging.c -o messaging.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 misc.c -o misc.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 nmi.c -o nmi.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 opengl.c -o opengl.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 overlord.c -o overlord.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 overworld.c -o overworld.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 player.c -o player.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 player_oam.c -o player_oam.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 poly.c -o poly.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 select_file.c -o select_file.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 spc_player.c -o spc_player.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 sprite.c -o sprite.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 sprite_main.c -o sprite_main.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 tagalong.c -o tagalong.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 tile_detect.c -o tile_detect.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 util.c -o util.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 zelda_cpu_infra.c -o zelda_cpu_infra.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 zelda_rtl.c -o zelda_rtl.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/apu.c -o snes/apu.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/cart.c -o snes/cart.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/cpu.c -o snes/cpu.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/dma.c -o snes/dma.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/dsp.c -o snes/dsp.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/input.c -o snes/input.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/ppu.c -o snes/ppu.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/snes.c -o snes/snes.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/snes_other.c -o snes/snes_other.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/spc.c -o snes/spc.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 snes/tracing.c -o snes/tracing.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 third_party/gl_core/gl_core_3_1.c -o third_party/gl_core/gl_core_3_1.o
cc -c -O2 -Werror -IC:/msys64/mingw32/include/SDL2 -Dmain=SDL_main -DSYSTEM_VOLUME_MIXER_AVAILABLE=0 third_party/opus-1.3.1-stripped/opus_decoder_amalgam.c -o third_party/opus-1.3.1-stripped/opus_decoder_amalgam.o
Generating Windows resources
In file included from third_party/opus-1.3.1-stripped/opus_decoder_amalgam.c:24:
third_party/opus-1.3.1-stripped/x86/pitch_sse.c: In function 'dual_inner_prod_sse':
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:86:10: error: SSE vector return without SSE enabled changes the ABI [-Werror=psabi]
86 | xsum1 = _mm_setzero_ps();
| ~~~~~~^~~~~~~~~~~~~~~~~~
In file included from Extracting game resources
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:40:
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:118:1: error: inlining failed in call to 'always_inline' '_mm_setzero_ps': target specific option mismatch
118 | _mm_setzero_ps (void)
| ^~~~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:87:12: note: called from here
87 | xsum2 = _mm_setzero_ps();
| ^~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:118:1: error: inlining failed in call to 'always_inline' '_mm_setzero_ps': target specific option mismatch
118 | _mm_setzero_ps (void)
| ^~~~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:86:12: note: called from here
86 | xsum1 = _mm_setzero_ps();
| ^~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:184:1: error: inlining failed in call to 'always_inline' '_mm_add_ps': target specific option mismatch
184 | _mm_add_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:94:15: note: called from here
94 | xsum2 = _mm_add_ps(xsum2,_mm_mul_ps(xi, y2i));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:196:1: error: inlining failed in call to 'always_inline' '_mm_mul_ps': target specific option mismatch
196 | _mm_mul_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:94:15: note: called from here
94 | xsum2 = _mm_add_ps(xsum2,_mm_mul_ps(xi, y2i));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:184:1: error: inlining failed in call to 'always_inline' '_mm_add_ps': target specific option mismatch
184 | _mm_add_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:93:15: note: called from here
93 | xsum1 = _mm_add_ps(xsum1,_mm_mul_ps(xi, y1i));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:196:1: error: inlining failed in call to 'always_inline' '_mm_mul_ps': target specific option mismatch
196 | _mm_mul_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:93:15: note: called from here
93 | xsum1 = _mm_add_ps(xsum1,_mm_mul_ps(xi, y1i));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:932:1: error: inlining failed in call to 'always_inline' '_mm_loadu_ps': target specific option mismatch
932 | _mm_loadu_ps (float const *__P)
| ^~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:92:20: note: called from here
92 | __m128 y2i = _mm_loadu_ps(y02+i);
| ^~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:932:1: error: inlining failed in call to 'always_inline' '_mm_loadu_ps': target specific option mismatch
932 | _mm_loadu_ps (float const *__P)
| ^~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:91:20: note: called from here
91 | __m128 y1i = _mm_loadu_ps(y01+i);
| ^~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:932:1: error: inlining failed in call to 'always_inline' '_mm_loadu_ps': target specific option mismatch
932 | _mm_loadu_ps (float const *__P)
| ^~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:90:19: note: called from here
90 | __m128 xi = _mm_loadu_ps(x+i);
| ^~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:961:1: error: inlining failed in call to 'always_inline' '_mm_store_ss': target specific option mismatch
961 | _mm_store_ss (float *__P, __m128 __A)
| ^~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:102:4: note: called from here
102 | _mm_store_ss(xy2, xsum2);
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:128:1: error: inlining failed in call to 'always_inline' '_mm_add_ss': target specific option mismatch
128 | _mm_add_ss (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:101:12: note: called from here
101 | xsum2 = _mm_add_ss(xsum2, _mm_shuffle_ps(xsum2, xsum2, 0x55));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:744:1: error: inlining failed in call to 'always_inline' '_mm_shuffle_ps': target specific option mismatch
744 | _mm_shuffle_ps (__m128 __A, __m128 __B, int const __mask)
| ^~~~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:101:12: note: called from here
101 | xsum2 = _mm_add_ss(xsum2, _mm_shuffle_ps(xsum2, xsum2, 0x55));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:184:1: error: inlining failed in call to 'always_inline' '_mm_add_ps': target specific option mismatch
184 | _mm_add_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:100:12: note: called from here
100 | xsum2 = _mm_add_ps(xsum2, _mm_movehl_ps(xsum2, xsum2));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:785:1: error: inlining failed in call to 'always_inline' '_mm_movehl_ps': target specific option mismatch
785 | _mm_movehl_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:100:12: note: called from here
100 | xsum2 = _mm_add_ps(xsum2, _mm_movehl_ps(xsum2, xsum2));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:961:1: error: inlining failed in call to 'always_inline' '_mm_store_ss': target specific option mismatch
961 | _mm_store_ss (float *__P, __m128 __A)
| ^~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:99:4: note: called from here
99 | _mm_store_ss(xy1, xsum1);
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:128:1: error: inlining failed in call to 'always_inline' '_mm_add_ss': target specific option mismatch
128 | _mm_add_ss (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:98:12: note: called from here
98 | xsum1 = _mm_add_ss(xsum1, _mm_shuffle_ps(xsum1, xsum1, 0x55));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:744:1: error: inlining failed in call to 'always_inline' '_mm_shuffle_ps': target specific option mismatch
744 | _mm_shuffle_ps (__m128 __A, __m128 __B, int const __mask)
| ^~~~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:98:12: note: called from here
98 | xsum1 = _mm_add_ss(xsum1, _mm_shuffle_ps(xsum1, xsum1, 0x55));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:184:1: error: inlining failed in call to 'always_inline' '_mm_add_ps': target specific option mismatch
184 | _mm_add_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:97:12: note: called from here
97 | xsum1 = _mm_add_ps(xsum1, _mm_movehl_ps(xsum1, xsum1));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/12.2.0/include/xmmintrin.h:785:1: error: inlining failed in call to 'always_inline' '_mm_movehl_ps': target specific option mismatch
785 | _mm_movehl_ps (__m128 __A, __m128 __B)
| ^~~~~~~~~~~~~
third_party/opus-1.3.1-stripped/x86/pitch_sse.c:97:12: note: called from here
97 | xsum1 = _mm_add_ps(xsum1, _mm_movehl_ps(xsum1, xsum1));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1.exe: all warnings being treated as errors
make: *** [Makefile:23: third_party/opus-1.3.1-stripped/opus_decoder_amalgam.o] Error 1
make: *** Waiting for unfinished jobs....
Impeeza@Titan MINGW32 ~/zelda3
Thanks for your effort.
from zelda3.
Perfect! I just got a full functional Zelda3.exe 32 bits with no dependencies
from zelda3.
On 64-bit platforms _M_X64 will be true, so then it will already set OPUS_X86_PRESUME_SSE etc
from zelda3.
Related Issues (20)
- boomerang bug HOT 1
- Disabling EnhancedMode7 leads to broken map rendering HOT 1
- A proper widescreen Ui layout HOT 1
- Zelda (G) Rom HOT 3
- Link's shadow is missing when using the magic cape in widescreen modes
- Can't throw boomerang diagonally south when Y is bound to certain Keypad keys HOT 2
- Error/warning while building in VS HOT 3
- Error while building with MSYS2 on Windows HOT 2
- Error while running python scripts HOT 1
- Super Bomb not working HOT 1
- Audio regression, sound effects get quieter near right screen edge
- MSYS build depends on libwinpthread-1.dll HOT 19
- Bug with Master Sword! HOT 6
- Good Bee sale bug
- Certain sprites aren't rendered in the extended view (bombs and its explosion for example)
- Shader error: Unknown key HOT 1
- Possible audio issues with replay HOT 3
- TCC build crash when carrying items for an unusually long time
- Possibility for Gamecube/Wii Port?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from zelda3.