Код: Выделить всё
\CMakeLists.txt
\conanfile.txt
\Dockerfile
\entrypoint.sh
\main.cpp
Код: Выделить всё
cmake_minimum_required(VERSION 3.8)
set(CMAKE_CXX_STANDARD 14)
project(glcrash)
file(GLOB_RECURSE COMPILABLE_FILES CONFIGURE_DEPENDS main.cpp)
find_package(GLEW REQUIRED)
find_package(glfw3 REQUIRED)
add_executable(${PROJECT_NAME} ${COMPILABLE_FILES})
target_link_libraries(${PROJECT_NAME}
GLEW::GLEW
glfw
)
Код: Выделить всё
[requires]
glew/2.2.0
glfw/3.3.8
[generators]
CMakeDeps
CMakeToolchain
[layout]
cmake_layout
Код: Выделить всё
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y \
build-essential \
cmake \
python3-pip \
pkg-config # for conan to install all packages
RUN pip3 install conan && conan profile detect
# BEGIN X-SERVER IN DOCKER CONTAINER --------------------------------
# Setup mesa drivers
#RUN add-apt-repository ppa:kisak/kisak-mesa # This will switch to the latest Mesa version available
RUN apt update && apt install -y \
libegl-mesa0 \
libegl1-mesa \
libegl1-mesa-dev \
libgl1-mesa-dev \
libglu1-mesa \
libglu1-mesa-dev \
libgl1-mesa-dri \
libgl1-mesa-glx \
libglapi-mesa \
libgles2-mesa \
libgles2-mesa-dev \
libglw1-mesa \
libglw1-mesa-dev \
libglx-mesa0 \
libosmesa6 \
libosmesa6-dev \
libfreetype6-dev \
mesa-utils \
xdotool \
mesa-common-dev \
libglib2.0-0
# Setup xvfb
RUN DEBIAN_FRONTEND=noninteractive \
apt install -y \
xvfb \
x11-xkb-utils \
xfonts-100dpi \
xfonts-75dpi \
xfonts-scalable \
xfonts-cyrillic \
xorg \
openbox \
xserver-xorg-core
# Setup our environment variables.
ENV XVFB_WHD="1920x1080x24"\
DISPLAY=":99" \
LIBGL_DEBUG="verbose" \
LIBGL_ALWAYS_SOFTWARE="1" \
MESA_DEBUG="1" \
GALLIUM_DRIVER="llvmpipe" \
LP_NO_RAST="false" \
LP_DEBUG="" \
LP_PERF="" \
LP_NUM_THREADS=""
# Copy our entrypoint into the container.
COPY ./entrypoint.sh /
RUN chmod +x /entrypoint.sh
# Set the default command.
ENTRYPOINT ["/entrypoint.sh"]
# END X-SERVER IN DOCKER CONTAINER --------------------------------
ADD * /opt/glcrash/
RUN cd /opt/glcrash && mkdir build && cd build \
&& conan install .. --build missing --output-folder=. -s build_type=Debug -c tools.system.package_manager:mode=install \
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=build/Debug/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Debug \
&& cmake --build .
Код: Выделить всё
#!/bin/sh
if [ $# -eq 0 ]; then
echo "No command was given to run, exiting."
exit 1
else
# Start Xvfb
echo "Starting Xvfb."
Xvfb ${DISPLAY} -ac -screen 0 "$XVFB_WHD" -nolisten tcp &
Xvfb_pid="$!"
echo -n "Waiting for Xvfb to be ready... "
while ! xdpyinfo -display ${DISPLAY} > /dev/null 2>&1; do
sleep 0.1
done
echo "done."
"$@"
returnValue=$?
echo -n "Stopping Xvfb... "
while kill -n 0 $Xvfb_pid > /dev/null 2>&1; do
wait
done
echo "done."
#echo "Removing Xvfb temporary files."
rm -rf /tmp/.X*
exit $returnValue
fi
Код: Выделить всё
#include
#include
#include
int main(int argc, char** argv)
{
if (!glfwInit())
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78299170/segfault-in-glgeterror-when-running-with-mesa-software-renderer-under-docker[/url]