{"adoption": {"forks": 872, "observed_at": "2026-08-28T04:07:46.646134+00:00", "stars": 3165}, "canonical_url": "https://ross.abutalabs.com/products/ndk_opengles_3_0", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Android OpenGL ES 3.0 从入门到精通系统性学习教程 ( OpenGL ES 3.X Systematic Learning Tutorials)", "domain": ["graphics", "mobile-development", "tutorials", "cross-platform"], "enriched": true, "function": ["graphics", "game-engine", "developer-tools"], "health_score": 49, "homepage": null, "language": "C++", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["githubhaohao/NDK_OpenGLES_3_0"], "name": "githubhaohao/NDK_OpenGLES_3_0", "platform": ["cpp", "cross-platform"], "pushed_at": "2025-10-22T15:13:38+00:00", "repo": "githubhaohao/NDK_OpenGLES_3_0", "stars": 3165, "tags": ["opengl-es", "ndk", "android-ndk", "gles3", "shaders", "rendering", "tutorial-series", "3d-graphics", "camera-filters", "yuv-rendering", "android", "mobile"], "topics": ["opengles", "ndk-opengles3", "android", "learn-opengles", "ndk", "android-opengl-es", "opengl-es"], "urls": [], "use_cases": ["learn opengl es 3.0 on android", "android ndk opengl es tutorial", "render yuv video with opengl es", "implement camera filters with shaders on android", "learn fbo offscreen rendering", "draw 3d models with opengl es on mobile", "learn egl and transform feedback", "portable c++ opengl es code across platforms"], "what_it_is": "A systematic, free open-source tutorial series for learning OpenGL ES 3.0 development on Android using the NDK, with sample code in C++ covering topics from triangle drawing to particles, skyboxes, and camera filters. The core rendering code is cross-platform C++ that can be ported to Android, iOS, Windows, and Linux.", "when_to_avoid": ["you need a production graphics engine or rendering library rather than learning material", "you target desktop-only OpenGL (not ES) or Vulkan", "you need a maintained SDK with API stability guarantees - this is a tutorial project"], "when_to_choose": ["you want a structured, hands-on tutorial path for OpenGL ES 3.0 with runnable Android sample code", "you are an Android developer learning NDK-based graphics programming", "you need examples of practical rendering techniques like YUV rendering, camera preview, and particle effects"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ndk_opengles_3_0", "repo": "githubhaohao/NDK_OpenGLES_3_0", "role": "main", "score": 54}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.646134+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:25:10.963939+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "782f2992a8bc6499df267a17299b839afc72b0b9bff6190958fdc790877517e6", "fetched_at": "2026-08-28T04:07:46.646134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/githubhaohao/NDK_OpenGLES_3_0"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 48, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2606, "days_push": 315, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 54, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}