Giter Site home page Giter Site logo

nikozdev / fork_llgl Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lukasbanana/llgl

0.0 0.0 0.0 60.38 MB

Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal

License: BSD 3-Clause "New" or "Revised" License

Shell 0.27% C++ 85.22% Python 0.91% C 2.33% Objective-C 1.41% TeX 0.87% Objective-C++ 6.60% CMake 1.40% GLSL 0.11% Batchfile 0.22% Metal 0.05% HLSL 0.63%

fork_llgl's Introduction

Low Level Graphics Library (LLGL)

License Join the chat at https://gitter.im/LLGL-Project/community

Documentation

Platform Support

Platform CI D3D12 D3D11 Vulkan OpenGL OpenGLES 3 Metal
Windows

MSVC16+ Build Status

MSVC14 Build Status

✔️ ✔️ ✔️ ✔️ N/A N/A
GNU/Linux GNU/Linux Build Status N/A N/A ✔️ ✔️ N/A N/A
macOS macOS Build Status N/A N/A N/A ✔️ N/A ✔️
iOS iOS Build Status N/A N/A N/A N/A ✖️ ✔️
Android N/A N/A ✖️ N/A ✔️ N/A

Build Notes

Build scripts are provided for CMake.

Windows

Visual Studio 2015 or later is required to build LLGL on Windows.

macOS, iOS

Xcode 9 or later is required to build LLGL on macOS and iOS.

GNU/Linux

The following development libraries are required to build LLGL on GNU/Linux:

  • X11: libx11-dev
  • Xrandr: libxrandr-dev

Android

The Android NDK with at least API level 21 is required. The build script to generate project files is currently only supported on GNU/Linux and requires CMake 3.10 or later and the Code::Blocks IDE.

This platform support is currently in an experimental state.

Installing LuaBridge (vcpkg)

Alternatively, you can build and install LLGL using vcpkg dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install llgl

The llgl port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.

Thin Abstraction Layer

// Unified Interface:
CommandBuffer::DrawIndexed(std::uint32_t numIndices, std::uint32_t firstIndex);

// OpenGL Implementation:
void GLImmediateCommandBuffer::DrawIndexed(std::uint32_t numIndices, std::uint32_t firstIndex) {
    glDrawElements(
        GetDrawMode(), static_cast<GLsizei>(numIndices), GetIndexType(), GetIndicesOffset(firstIndex)
    );
}

// Direct3D 11 Implementation
void D3D11CommandBuffer::DrawIndexed(std::uint32_t numIndices, std::uint32_t firstIndex) {
    FlushConstantsCache();
    context_->DrawIndexed(numIndices, firstIndex, 0);
}

// Direct3D 12 Implementation
void D3D12CommandBuffer::DrawIndexed(std::uint32_t numIndices, std::uint32_t firstIndex) {
    FlushGraphicsStagingDescriptorTables();
    commandList_->DrawIndexedInstanced(numIndices, 1, firstIndex, 0, 0);
}

// Vulkan Implementation
void VKCommandBuffer::DrawIndexed(std::uint32_t numIndices, std::uint32_t firstIndex) {
    FlushDescriptorCache();
    vkCmdDrawIndexed(commandBuffer_, numIndices, 1, firstIndex, 0, 0);
}

// Metal implementation
void MTCommandBuffer::DrawIndexed(std::uint32_t numIndices, std::uint32_t firstIndex) {
    if (numPatchControlPoints_ > 0) {
        [renderEncoder_
            drawIndexedPatches:             numPatchControlPoints_
            patchStart:                     static_cast<NSUInteger>(firstIndex) / numPatchControlPoints_
            patchCount:                     static_cast<NSUInteger>(numIndices) / numPatchControlPoints_
            patchIndexBuffer:               nil
            patchIndexBufferOffset:         0
            controlPointIndexBuffer:        indexBuffer_
            controlPointIndexBufferOffset:  indexTypeSize_ * (static_cast<NSUInteger>(firstIndex))
            instanceCount:                  1
            baseInstance:                   0
        ];
    } else {
        [renderEncoder_
            drawIndexedPrimitives:  primitiveType_
            indexCount:             static_cast<NSUInteger>(numIndices)
            indexType:              indexType_
            indexBuffer:            indexBuffer_
            indexBufferOffset:      indexTypeSize_ * static_cast<NSUInteger>(firstIndex)
        ];
    }
}

fork_llgl's People

Contributors

lukasbanana avatar raxvan avatar julianxhokaxhiu avatar beldenfox avatar bsaleil avatar frankxie05 avatar gdianaty avatar nofr1ends avatar autoantwort avatar underdoeg avatar shenmian avatar germanaizek avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.