The Forge is a cross-platform rendering framework supporting
*(only available for accredited developers on request)
Particularly, the graphics layer of The Forge supports cross-platform
The Forge can be used to provide the rendering layer for custom next-gen game engines. It is also meant to provide building blocks to write your own game engine. It is like a "lego" set that allows you to use pieces to build a game engine quickly. The "lego" High-Level Features supported on all platforms are at the moment:
Please find a link and credits for all open-source packages used at the end of this readme.
Join the Discord channel at https://discord.gg/hJS54bz
Join the channel at https://twitter.com/TheForge_FX?lang=en
The Forge Interactive Inc. is a Khronos member
Quest 2 running 01_Transformations
Quest 2 running 09_ShadowPlayground
iMac with M1 chip running at 3840x2160 resolution
iPad with M1 chip running with 1024x1366 resolution
It is astonishing how well the iPad with M1 chip perform.Due to -what we consider driver bugs- M1 hardware crashes in
This is our biggest update since we started this repository more than three years ago. This update is one of those "what we have learned from the last couple of projects that are using TF" updates and a few more things.
Aura - Windows DirectX 12 Geforce 980TI 1080p Driver 466.47
Aura - Windows Vulkan Geforce 980TI 1080p Driver 466.47
Aura - Ubuntu Vulkan Geforce RTX 2080 1080p
Aura - PS4
Aura - XBOX One original
Forge Shader Language (FSL) translator - after struggeling with writing a shader translator now for 1 1/2 years, we restarted from scratch. This time we developed everything in Python, because it is cross-platform. We also picked a really "low-tech keep it simple" approach. The idea is that a small game team can actually maintain the code base and write shaders efficiently. We wanted a shader translator that translates a FSL shader to the native shader language of each of the platforms. This way whatever shader compiler is used on that platform can take over the actual job of compiling the native code.The reason why we are doing this lies mostly in the unreliability of DXC and SPIR-V in general and also their lack of reliability if it comes to cross-platform translation.
There is a Wiki entry that holds a FSL language primer and general information how this works here:
Run-Time API Switching - we had some sort of run-time API switching in an early version of The Forge. At the time we were not expecting this to be very useful because most game teams do not switch APIs on the fly. In the meantime we found a usage case on Android, where we have to reach a large number of devices. So we came up with a better solution that is more consistent with the overall architecture and works on at least PC and Android platforms.On Windows PC one can switch between DX12, Vulkan and DX11 if all are supported. On Android one can switch between Vulkan and OpenGL ES 2.0. The later allows us to target a much larger group of devices for business application frameworks. We could extend this architecture to other platforms like consoles easily.This new API switching required us to change the rendering interfaces. So it is a breaking change to existing implementations but we think it is not much effort to upgrade and the resulting code is easier to read and maintain and overall improves the code base by being more consistent.
Device Reset - This was implemented together with API switching. Windows forces game developers to respond to a crashing device driver by resetting the device. We implemented the functionality already in the last update here on GitHub. This update integrates it better into the OS base layer.We also verified that the life cycle management for Windows in each application based on the IApp interface works now for device change, device reset and for API switching so that we can cover all cases of losing and recovering the device.
The functions for API switching and device reload and reset are:
void onRequestReload();
void onDeviceLost();
void onAPISwitch();
Variable Rate Shading (VRS) - we implemented VRS in a new unit test 35_VariableRateShading. It is only supported by DirectX 12 on Windows and XBOX Series S / X.In this demo, we demonstrate two main ways of setting the shading rate:
The cubes are using per-draw shading rate while the background is using per-tile shading rate.
Notes:
Multi-Sample Anti-Aliasing (MSAA) - we added a dynamic way of picking MSAA to unit test 9 and the Visibility Buffer example on all platforms.
Android & OpenGL ES 2 - the OpenGL ES 2 layer for Android is now more stable and tested and closer to production code. As mentioned above on an Android phone one can switch between Vulkan and OpenGL ES 2 dyanmically if both are supported.Now Android & OpenGL ES 2 support additionally unit test 17 - Entity Component System Test.In general we are testing many Android phones at the moment on the low and high end of the spectrum following the two Android projects we are currently working on, which are on both ends of the spectrum.
PVS Studio - we did another manual pass on the code base with PVS Studio -a static code analyzer- to increase code quality.
As the year winds slowly down, we finally found time to do another release. First of all, Happy Holidays and a happy new Year!
Most of us will take off over the Holiday season and spent time with their families. We should be back online in the middle of January 2021.
*OSBase.*
files you can find a snippet of code that looks like this:if (pApp->mSettings.mResetGraphics)
{
pApp->Unload();
pApp->Load();
pApp->mSettings.mResetGraphics = false;
}
Breadcrumb are user defined markers used to pinpoint which command has caused GPU to stall.In the Breadcrumb unit test, two markers get injected into the command list.Pressing the crash button would result in a GPU hang.In this situation, the first marker would be written before the draw command, but the second one would stall for the draw command to finish.Due to the infinite loop in the shader, the second marker won't be written, and we can reason that the draw command has caused the GPU to hang.We log the markers' information to verify this.Check out this link for more info: D3D12 Device Removed Extended Data (DRED)
Here is how the current Lua support in the functional tests might look like:
DX11 refactor: we re-wrote the DX11 run-time a few times. We ended up with the most straighforward version. This version only recently shipped in Hades along with the Vulkan run-time on PC.
YUV support: we have now YUV support for all our Vulkan API platforms PC, Linux, Android and Switch. There is a new functional test for YUV. It runs on all these platforms:
Audio: we removed the audio functional test. It was the only test that was released unfinished and didn't run on all our platforms. Our customers show love for FMOD ... would make more sense to show an integration of that.
GitHub issues fixed:
Numerous other fixes ...
See the release notes from previous releases in the Release section.
Windows 10
Drivers
Base version:
To use Raytracing:
https://developer.microsoft.com/en-us/windows/downloads/sdk-archive
The Forge supports now as the min spec for the Vulkan SDK 1.1.82.0 and as the max spec 1.1.114
The Forge is currently tested on
macOS min spec. 10.13.6
Xcode 11.0 (11A419c)
The Forge is currently tested on the following macOS devices:
At this moment we do not have access to an iMac with M1 chipset (we ordered one), iMac Pro or Mac Pro. We can test those either with Team Viewer access or by getting them into the office and integrating them into our build system.We will not test any Hackintosh configuration.
iOS 14.1
XCode: see macOS
To run the unit tests, The Forge requires an iOS device with an A9 or higher CPU (see GPU Processors or see iOS_Family in this table iOS_GPUFamily3_v3). This is required to support the hardware tessellation unit test and the ExecuteIndirect unit test (requires indirect buffer support). The Visibility Buffer doesn't run on current iOS devices because the texture argument buffer on those devices is limited to 31 (see Metal Feature Set Table and look for the entry "Maximum number of entries in the texture argument table, per graphics or compute function") , while on macOS it is 128, which we need for the bindless texture array.
We are currently testing on
iPadOS 13.1 beta 3 (17A5837a)
XCode: see macOS
We are currently testing on:
Ubuntu 18.04 LTS Kernel Version: 4.15.0-20-generic
GPU Drivers:
Workspace file is provided for codelite 12.0.6
Vulkan SDK Version 1.1.108: download the native Ubuntu Linux package for all the elements of the Vulkan SDK LunarG Vulkan SDK Packages for Ubuntu 16.04 and 18.04
The Forge is currently tested on Ubuntu with the following GPUs:
Android Phone with Android Pie (9.x) for Vulkan 1.1 support
Visual Studio 2019 (Visual Studio 2017 works too but has a bug in the build module)
Android API level 23 or higher
At the moment, the Android run-time does not support the following unit tests due to -what we consider- driver bugs or lack of support:
Using Visual Studio Installer install "Mobile Development with C++".We don't need NDK that comes with this packages so that can be unchecked.
Download latest NDK. -- https://developer.android.com/ndk/downloads
Add NDK path in Visual Studio (Tools->Options->Android).
Building Shaderc library:Open Command Prompt at directory
(ndk_root)\sources\third_party\shaderc
And use this command,
..\..\..\ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk APP_STL:=c++_static APP_ABI=arm64-v8a libshaderc_combined APP_PLATFORM=android-28 -j16
Note: If building process gives python "import" errors, try setting this environment path variable, NDK_HOST_PYTHON = (Python_dir)\python.exe
Steps if You want to creat a new Project(--there are quite a few steps but we got you covered :) )
Create A new Native-Activity Application for apk or Satitc Library if you want to build a library.
For respective architecture we insert the corresponding triple value in the macro(we only support ARM and ARM64)
You can either add property sheets given by us which are included in Android_VisualStudio2017 folder, to your project's current target by selecting Add existing property sheet.or create your own and just add those two Macros.
$(CustomSysroot)\usr\include
$(CustomSysroot)\usr\include\$(TRIPLE)
$(VS_Ndkroot)\sources\android\native_app_glue
5)add path to library
$(SolutionDir)$(Platform)\$(Configuration)\ (this is where we have all our libs. set it accordingly)
$(VS_Ndkroot)\sources\third_party\shaderc\libs\c++_static\$(TargetArchAbi)
6)add path to executable directory and uncheck inherit from parent
$(VS_NdkRoot)\toolchains\llvm\prebuilt\windows-x86_64\bin
Notes:
Add -lm to you project Linker Command Line options for if you get any undefined math operations error
If you get error related to "cannot use 'throw' with exceptions disabled"
If you get error related to multiple instances of ioctladd BIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD in preprocessor definitions
If you get errors related to neon support not enabled-Enable Advance SIMD to Yes-Set floating point ABI to softfp
For PC Windows run PRE_BUILD.bat. It will download and unzip the art assets and install the shader builder extension for Visual Studio 2017.
For Linux and Mac run PRE_BUILD.command. If its the first time checking out the forge make sure the PRE_BUILD.command has the correct executable flag by running the following commandchmod +x PRE_BUILD.command
It will only download and unzip required Art Assets (No plugins/extensions install).
There are the following unit tests in The Forge:
This unit test just shows a simple solar system. It is our "3D game Hello World" setup for cross-platform rendering.
This unit test shows a Julia 4D fractal running in a compute shader. In the future this test will use several compute queues at once.
This unit test shows how to generate a large number of command buffers on all platforms supported by The Forge. This unit test is based on a demo by Intel called Stardust.
This unit test shows the difference in speed between Instanced Rendering, using ExecuteIndirect with CPU update of the indirect argument buffers and using ExecuteIndirect with GPU update of the indirect argument buffers.This unit test is based on the Asteroids example by Intel.
Using ExecuteIndirect with GPU updates for the indirect argument buffers
Using ExecuteIndirect with CPU updates for the indirect argument buffers
This unit test shows the current state of our font rendering library that is based on several open-source libraries.
This unit test shows a range of game related materials:
Hair:Many years ago in 2012 / 2013, we helped AMD and Crystal Dynamics with the development of TressFX for Tomb Raider. We also wrote an article about the implementation in GPU Pro 5 and gave a few joint presentations on conferences like FMX. At the end of last year we revisited TressFX. We took the current code in the GitHub repository, changed it a bit and ported it to The Forge. It now runs on PC with DirectX 12 / Vulkan, macOS and iOS with Metal 2 and on the XBOX One. We also created a few new hair assets so that we can showcase it. Here is a screenshot of our programmer art:
Metal:
Wood:
This unit test showcases the rendering of grass with the help of hardware tessellation.
A cross-platform glTF model viewer that optimizes the vertex and index layout for the underlying platform and picks the right texture format for the underlying platform. We integrated Arseny Kapoulkine @zeuxcg excellent meshoptimizer and use the same PBR as used in the Material Playground unit test.This modelviewer can also utilize Binomials Basis Universal Texture Support as an option to load textures. Support was added to the Image class as a "new image format". So you can pick basis like you can pick DDS or KTX. For iOS / Android we go directly to ASTC because Basis doesn't support ASTC at the moment.
glTF model viewer running on iPad with 2048x1536 resolution
glTF model viewer running on Samsung Galaxy S10 with Vulkan with 1995x945 resolution
glTF model viewer running on Ubuntu AMD RX 480 with Vulkan with 1920x1080 resolution
This unit test shows various shadow and lighting techniques that can be chosen from a drop down menu. There will be more in the future.
To achieve high-performance, the playground runs on our signature rendering architecture called Triangle Visibility Buffer. The step that generates the SDF data also uses this architecture.
Click on the following screenshot to see a movie:
The following PC screenshots are taken on Windows 10 with a AMD RX550 GPU (driver 19.7.1) with a resolution of 1920x1080.
Exponential Shadow Maps:
Adaptive Shadow Map with Parallax Correction Cache
Signed Distance Field Soft Shadow:
Signed Distance Field Soft Shadows - Debug Visualization
The following shots show Signed Distance Field Soft Shadows running on iMac with a AMD RADEON Pro 580
The following shots show Signed Distance Field Soft Shadows running on XBOX One:
Readme for Signed Distance Field Soft Shadow Maps:
To generate the SDF Mesh data you should select “Signed Distance Field” as the selected shadow type in the Light and Shadow Playground. There is a button called “Generate Missing SDF” and once its clicked, it shows a progress bar that represents the remaining SDF mesh objects utilized for SDF data generation. This process is multithreaded, so the user can still move around the scene while waiting for the SDF process to be finished. This is a long process and it could consume up to 8+ hours depending on your CPU specs. To check how many SDF objects there are presently in the scene, you can mark the checkbox "Visualize SDF Geometry On The Scene".
This unit test was build by Kostas Anagnostou @KostasAAA to show how to ray trace shadows without using a ray tracing API like DXR / RTX. It should run on all GPUs (not just NVIDIA RTX GPUs) and the expectation is that it should run comparable with a DXR / RTX based version even on a NVIDIA RTX GPU. That means the users of your game do not have to buy a NVIDIA RTX GPU to enjoy HRT shadows :-)
This test offers two choices: you can pick either Pixel Projected Reflections or AMD's FX Stochastic Screen Space Reflection. We just made AMD's FX code cross-platform. It runs now on Windows, Linux, macOS, Switch, PS and XBOX.
Here are the screenshots of AMD's FX Stochastic Screen Space Reflections:
In case you pick Pixel-Projected Reflections, the application features an implementation of the papers Optimized pixel-projected reflections for planar reflectors and IMPLEMENTATION OF OPTIMIZED PIXEL-PROJECTED REFLECTIONS FOR PLANAR REFLECTORS
This unit test shows a typical VR Multi-GPU configuration. One eye is rendered by one GPU and the other eye by the other one.
This unit test showcases a cross-platform FileSystem C API, supporting disk-based files, memory streams, and files in zip archives. The API can be viewed in IFileSystem.h, and all of the example code has been updated to use the new API.
Path
s, where each Path
represents an absolute, canonical path string on a particular file system. You can query information about the files at Path
s, open files as FileStream
s, and copy files between different Path
s.FileSystemRoot
s has been replaced by ResourceDirectory
s. ResourceDirectory
s are predefined directories where resources are expected to exist, and there are convenience functions to open files in resource directories. If your resources don’t exist within the default directory for a particular resource type, you can call fsSetPathForResourceDirectory
to relocate the resource directory; see the unit tests for sample code on how to do this.This unit test shows how the integration of imGui is done with a wide range of functionality.
This unit test compares various Order-Indpendent Transparency Methods. In the moment it shows:
This unit test shows how to use the new wave intrinsics. Supporting Windows with DirectX 12 / Vulkan, Linux with Vulkan and macOS / iOS.
The new 16_Raytracing unit test shows a simple cross-platform path tracer. On iOS this path tracer requires A11 or higher. It is meant to be used in tools in the future and doesn't run in real-time.To support the new path tracer, the Metal raytracing backend has been overhauled to use a sort-and-dispatch based approach, enabling efficient support for multiple hit groups and miss shaders. The most significant limitation for raytracing on Metal is that only tail recursion is supported, which can be worked around using larger per-ray payloads and splitting up shaders into sub-shaders after each TraceRay call; see the Metal shaders used for 16_Raytracing for an example on how this can be done.
macOS 1920x1080 AMD Pro Vega 64
iOS iPhone X 812x375
Windows 10 1080p NVIDIA RTX 2080 with DXR Driver version 441.12
Windows 10 1080p NVIDIA RTX 2080 with RTX Driver version 441.12
Linux 1080p NVIDIA RTX 2060 with RTX Driver version 435
This unit test was originally posted on ShaderToy by Inigo Quilez and Sopyer. It shows how a scene is ray marched with shadows, reflections and AO
This unit test shows how to use the high-performance entity component system in The Forge. This unit test is based on a ECS system that we developed internally for tools.
The Forge has now support for Sparse Virtual Textures on Windows and Linux with DirectX 12 / Vulkan. Sparse texture (also known as "virtual texture", “tiled texture”, or “mega-texture”) is a technique to load huge size (such as 16k x 16k or more) textures in GPU memory.It breaks an original texture down into small square or rectangular tiles to load only visible part of them.
The unit test 18_Virtual_Texture is using 7 sparse textures:
There is a unit test that shows a solar system where you can approach planets with Sparse Virtual Textures attached and the resolution of the texture will increase when you approach.
Linux 1080p NVIDIA RTX 2060 with RTX Driver version 435
Windows 10 1080p NVIDIA 1080 DirectX 12
Windows 10 1080p NVIDIA 1080 Vulkan
This unit test shows how to playback a clip on a rig.
This unit test shows how to blend multiple clips and play them back on a rig.
This unit test shows how to attach an object to a rig which is being posed by an animation.
This unit test shows how to blend clips having each only effect a certain portion of joints.
This unit test shows how to introduce an additive clip onto another clip and play the result on a rig.
This unit test shows how to use a scene of a physics interaction that has been baked into an animation and play it back on a rig.
This unit test shows how to animate multiple rigs simultaneously while using multi-threading for the animation updates.
This unit test shows how to use skinning with Ozz
This unit test shows how to use a Aim and a Two bone IK solvers
This test demonstrates windows management on Windows, Linux and macOS.
Here are the screenshots:
YUV support: we have now YUV support for all our Vulkan API platforms PC, Linux, Android and Switch. There is a new functional test for YUV. It runs on all these platforms:
The cubes are using per-draw shading rate while the background is using per-tile shading rate.
There is an example implementation of the Triangle Visibility Buffer as covered in various conference talks. Here is a blog entry that details the implementation in The Forge.
Below are screenshots and descriptions of some of the tools we integrated.
MTunerMTuner was integrated into the Windows 10 runtime of The Forge following a request for more in-depth memory profiling capabilities by one of the developers we support. It has been adapted to work closely with our framework and its existing memory tracking capabilities to provide a complete picture of a given application’s memory usage.
To use The Forge’s MTuner functionality, simply drag and drop the .MTuner file generated alongside your application’s executable into the MTuner host app, and you can immediately begin analyzing your program’s memory usage. The intuitive interface and exhaustive supply of allocation info contained in a single capture file makes it easy to identify usage patterns and hotspots, as well as tracking memory leaks down to the file and line number. The full documentation of MTuner can be found [here](link: https://milostosic.github.io/MTuner/).
Currently, this feature is only available on Windows 10, but support for additional platforms provided by The Forge is forthcoming.Here is a screenshot of an example capture done on our first Unit Test, 01_Transformations:
Based on request we are providing a Ray Tracing Benchmark in 16_RayTracing. It allows you to compare the performance of three platforms:
We will extend this benchmark to the non-public platforms we support to compare the PC performance with console performance.The benchmark comes with batch files for all three platforms. Each run generates a HTML output file from the profiler that is integrated in TF. The default number of iterations is 64 but you can adjust that. There is a Readme file in the 16_RayTracing folder that describes the options.
Windows DirectX 12 DXR, GeForce RTX 2070 Super, 3840x1600, NVIDIA Driver 441.99
Windows Vulkan RTX, GeForce RTX 2070 Super, 3840x1600, NVIDIA Driver 441.99
We integrated the Micro Profiler into our code base by replacing the proprietary UI with imGUI and simplified the usage. Now it is much more tightly and consistently integrated in our code base.
Here are screenshots of the Microprofiler running the Visibility Buffer on PC:
Here are screenshots of the Microprofiler running a unit test on iOS:
Check out the Wikipage for an explanation on how to use it.
We provide a shader translator, that translates one shader language -a superset of HLSL called Forge Shader Language (FLS) - to the target shader language of all our target platforms. That includes the console and mobile platforms as well.It is written in Python. We expect this shader translator to be an easier to maintain solution for smaller game teams because it allows to add additional data to the shader source file with less effort. Such data could be for example a bucket classification or different shaders for different capability levels of the underlying platform, descriptor memory requirements or resource memory requirements in general, material info or just information to easier pre-compile pipelines.The actual shader compilation will be done by the native compiler of the target platform.
How to use the Shader Translator
The Forge Interactive Inc. will prepare releases when all the platforms are stable and running and push them to this GitHub repository. Up until a release, development will happen on internal servers. This is to sync up the console, mobile, macOS and PC versions of the source code.
We would appreciate it if you could send us a link in case your product uses The Forge. Here are the ones we received so far or we contributed to:
Supergiant's Hades we are working with Supergiant since 2014. One of the on-going challenges was that their run-time was written in C#. At the beginning of last year, we suggested to help them in building a new cross-platform game engine in C/C++ from scratch with The Forge. The project started in April 2019 and the first version of this new engine launched in May this year. Hades was then released for Microsoft Windows, macOS, and Nintendo Switch on September 17, 2020. The game can run on all platforms supported by The Forge.
Here is a screenshot of Hades running on Switch:
Here is an article by Forbes about Hades being at the top of the Nintendo Switch Charts.Hades is also a technology showcase for Intel's integrated GPUs on macOS and Windows. The target group of the game seems to often own those GPUs.
Bethesda based their rendering layer for their next-gen engine on The Forge. We helped integrate and optimize it.
Here is more info about this game engine:
Todd Howard Teases Bethesda's New Game Engine Behind The Elder Scrolls 6 And Starfield
Bethesda's overhauling its engine for Starfield and The Elder Scrolls 6
The Forge is used to build the StarVR One SDK:
The Forge will be used as the rendering framework in Torque 3D:
SWB is an editor for the 2003 game 'Star Wars Galaxies' that can edit terrains, scenes, particles and import/export models via FBX. The editor uses an engine called 'atlas' that will be made open source in the future. It focuses on making efficient use of the new graphics APIs (with help from The-Forge!), ease-of-use and terrain rendering.
For contributions to The Forge we apply the following writing guidelines:
There will be a user group meeting during GDC. In case you want to organize a user group meeting in your country / town at any other point in time, we would like to support this. We could send an engineer for a talk.
In case your School / College / University uses The Forge for education, we would like to support this as well. We could send an engineer or help create material. So far the following schools use The Forge for teaching:
Breda University of Applied Sciences
Contact:
Jeremiah van Oosten
Monseigneur Hopmansstraat 1
4817 JT Breda
Contact:
Andrew Hogue
Ontario Tech University
SIRC 4th floor
2000 Simcoe St N
Oshawa, ON, L1H 7K4
The Forge utilizes the following Open-Source libraries:
问题及步骤描述: 根据Electron官网步骤进行打包时: npx @electron-forge/cli import 命令提示: √ Checking your system It looks like you are missing some dependencies you need to get Electron running. Make sure you have git inst
项目场景: 近期在研究人脸算法,需要用到dlib库,已经在window环境中正常跑通代码,准备把程序部署到服务器上,却卡在了安装dlib库上,耗费了大半天时间,特地记录一下纪念耗费掉的时间。 问题描述: anaconda已经正常安装,按照常规操作进行pip安装: pip install dlib 报错信息如下: … – Using CMake version: 3.20.5 – Compilin
conda install -c conda-forge jupyter_contrib_nbextensions Collecting package metadata (current_repodata.json): done Solving environment: done > WARNING: A newer version of conda exists. < current vers
现象 安装electron-forge和electron-forge init 项目均中出现 deprecate s3@4.4.0 › graceful-fs@~3.0.5 please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js deprecate zip-folde
写在前面 折腾了一晚上,终于搞定了用conda-forge安装Apple优化之后的TensorFlow啦!真的太不容易了…一开始我是不想折腾的,后来才发现直接用bash安装的Python虚拟环境使用起来有很多不方便的地方,而且就算很多软件包可以通过源码编译的方式安装到虚拟环境,但是还是有那么几个不配合的软件包安装不了…就比如sklearn,人家官网上明确说了: For Apple Silicon
The-pit-of-the-Android-Studio 老卢独家整理Android Studio的填坑指南 以下是本文档的主要内容: �� 1️⃣ Android Studio版本号、Gradle版本、Build Tools 三者的对照关系表; Cmake版本对照表; Kotlin有关的Gradle插件版本对照表; Support包版本对照表; AndroidX和Support库版本对照表;
问题内容: I am using . I have a which updates my two other tables. I have read the Stack over flow this link enter link description here , but it does not full fill my needs. Below is my Below error is sh
描述 (Description) 基础网格系统通过页面最多可扩展到12列。 网格系统用于通过一系列容纳内容的行和列来创建页面布局。 网格选项 下表简要介绍了Foundation网格系统如何在多个设备中工作。 小型设备电话(<640px) 中型设备平板电脑(> = 640px) 大型设备笔记本电脑和台式机(> = 1200px) Grid behavior Horizontal at all tim
The Mole是一款自动化的SQL注入漏洞利用工具。只需提供一个URL和一个可用的关键字,它就能够检测注入点并利用。The Mole可以使用union注入技术和基于逻辑查询的注入技术。
开发者都或多或少接触过 linux 接触过命令行,当然肯定也都被命令行狠狠地“fuck”过。我很多时候都是微不足道的原因导致了命令行出错,例如将 python 输入成 ptyhon,例如将 ls -alh 输入成 ls a-lh而导致出错,这个时候我会想说:“fuck”。 起源 开发 thefuck 的这位同仁,恐怕也经常会有这种不和谐的情况。因此开发了这个软件 thefuck。 thefuck
The Modal 是个 jQuery 对话框插件,类似 Facebook 和 VK 照片 modals。 功能 不需要额外的标记 用户可以使用它 w/o 标记来打开空 modal 和填充数据 可选 ESC 关闭(默认启用) 在线演示