diff --git a/renderer b/renderer index eacda07..6492c51 100755 Binary files a/renderer and b/renderer differ diff --git a/src/.display.c.swp b/src/.display.c.swp new file mode 100644 index 0000000..a1daa1a Binary files /dev/null and b/src/.display.c.swp differ diff --git a/src/.display.h.swp b/src/.display.h.swp new file mode 100644 index 0000000..20ea05f Binary files /dev/null and b/src/.display.h.swp differ diff --git a/src/.main.c.swp b/src/.main.c.swp new file mode 100644 index 0000000..ba20ab0 Binary files /dev/null and b/src/.main.c.swp differ diff --git a/src/display.c b/src/display.c new file mode 100644 index 0000000..ce1d8dd --- /dev/null +++ b/src/display.c @@ -0,0 +1,100 @@ +#include "display.h" + + +SDL_Window* window = NULL; +SDL_Renderer* renderer = NULL; + +// Also known as frame buffer in other books, pointer to an array of color_buffer +uint32_t* color_buffer = NULL; +SDL_Texture* color_buffer_texture = NULL; + +int window_width = 800; +int window_height = 600; + +bool initialize_window(void) { + if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { + fprintf(stderr, "Error initializing SDL.\n"); + return false; + + } + + // Use SDL to query what is the fullscreen max. width and height + SDL_DisplayMode display_mode; + SDL_GetCurrentDisplayMode(0, &display_mode); + + window_width = display_mode.w; + window_height = display_mode.h; + + // Create a SDL window + window = SDL_CreateWindow( + NULL, + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + window_width, + window_height, + SDL_WINDOW_BORDERLESS + ); + if (!window) { + fprintf(stderr, "Error creating SDL window.\n"); + return false; + } + + // Create a SDL renderer + renderer = SDL_CreateRenderer(window, -1, 0); + if (!renderer) { + fprintf(stderr, "Error creating SDL error.\n"); + return false; + } + SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN); + + + return true; +} + +void render_color_buffer(void){ + SDL_UpdateTexture( + color_buffer_texture, + NULL, + color_buffer, + (int)(window_width * sizeof(uint32_t)) + ); + SDL_RenderCopy(renderer, color_buffer_texture, NULL, NULL); +} + +void clear_color_buffer(uint32_t color){ + for (int y = 0; y < window_height; y++){ + for (int x = 0; x < window_width; x++){ + color_buffer[(window_width * y) + x] = color; + } + } +} + +void draw_rect(int x, int y, int width, int height, uint32_t color){ + for (int j = x; j <= x + width; j++){ + for (int k = y; k <= y + height; k++){ + color_buffer[(window_width * j) + k] = color; + } + } +} + +void draw_pixel(int x, int y, uint32_t color){ + if (x < window_width && y < window_height){ + color_buffer[(window_width * y) + x] = color; + } +} + +void draw_grid(void){ + for (int y = 0; y < window_height; y += 10){ + for (int x = 0; x < window_width; x += 10){ + color_buffer[(window_width * y) + x ] = 0xFF133343; + } + } +} + +void destroy_window(void){ + free(color_buffer); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); +} + diff --git a/src/display.h b/src/display.h new file mode 100644 index 0000000..54c38a8 --- /dev/null +++ b/src/display.h @@ -0,0 +1,24 @@ +#ifndef DISPLAY_H +#define DISPLAY_H + +#include +#include +#include + + +extern SDL_Window* window; +extern SDL_Renderer* renderer; +extern uint32_t* color_buffer; +extern SDL_Texture* color_buffer_texture; +extern int window_width; +extern int window_height; + +bool initialize_window(void); +void draw_pixel(int x, int y, uint32_t color); +void draw_rect(int x, int y, int width, int height, uint32_t color); +void draw_grid(void); +void render_color_buffer(void); +void clear_color_buffer(uint32_t color); +void destroy_window(void); + +#endif diff --git a/src/main.c b/src/main.c index fa83faf..c92925d 100644 --- a/src/main.c +++ b/src/main.c @@ -1,66 +1,10 @@ -#include #include #include #include +#include "display.h" bool is_running = false; -SDL_Window* window = NULL; -SDL_Renderer* renderer = NULL; - -// Also known as frame buffer in other books, pointer to an array of color_buffer -uint32_t* color_buffer = NULL; -SDL_Texture* color_buffer_texture = NULL; - -int window_width = 800; -int window_height = 600; - -bool initialize_window(void) { - if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { - fprintf(stderr, "Error initializing SDL.\n"); - return false; - - } - - // Use SDL to query what is the fullscreen max. width and height - SDL_DisplayMode display_mode; - SDL_GetCurrentDisplayMode(0, &display_mode); - - window_width = display_mode.w; - window_height = display_mode.h; - - // Create a SDL window - window = SDL_CreateWindow( - NULL, - SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, - window_width, - window_height, - SDL_WINDOW_BORDERLESS - ); - if (!window) { - fprintf(stderr, "Error creating SDL window.\n"); - return false; - } - - // Create a SDL renderer - renderer = SDL_CreateRenderer(window, -1, 0); - if (!renderer) { - fprintf(stderr, "Error creating SDL error.\n"); - return false; - } - SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN); - - - return true; -} - - - - -// SDL_RenderDrawLine(&render_grid, 100, 100, 300, 300); - - void setup(void){ // Allocates the memory in bytes required to hold for color_buffer, using sizeof to allocate the # of bytes required color_buffer = (uint32_t*) malloc(sizeof(uint32_t) * window_width * window_height); @@ -93,60 +37,20 @@ void update(void){ //TODO } -void render_color_buffer(void){ - SDL_UpdateTexture( - color_buffer_texture, - NULL, - color_buffer, - (int)(window_width * sizeof(uint32_t)) - ); - SDL_RenderCopy(renderer, color_buffer_texture, NULL, NULL); -} - -void clear_color_buffer(uint32_t color){ - for (int y = 0; y < window_height; y++){ - for (int x = 0; x < window_width; x++){ - color_buffer[(window_width * y) + x] = color; - } - } -} - -void draw_rect(int x, int y, int width, int height, uint32_t color){ - for (int j = x; j <= x + width; j ++){ - for (int k = y; k <= y + height; k ++){ - color_buffer[(window_width * j) + k] = color; - } - } -} - -void draw_grid(void){ - for (int y = 0; y < window_height; y += 10){ - for (int x = 0; x < window_width; x += 10){ - color_buffer[(window_width * y) + x ] = 0xFF133343; - } - } -} void render(void){ SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); SDL_RenderClear(renderer); draw_grid(); - draw_rect(100, 200, 200, 400, 0xFF998500); + draw_pixel(20, 20, 0xFFFFFF00); + //draw_rect(100, 200, 200, 400, 0xFF998500); render_color_buffer(); clear_color_buffer(0xFF000000); SDL_RenderPresent(renderer); } -void destroy_window(void){ - free(color_buffer); - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - SDL_Quit(); -} - - int main(void) { is_running = initialize_window(); diff --git a/ycm_extra_conf.py b/ycm_extra_conf.py deleted file mode 100644 index d970148..0000000 --- a/ycm_extra_conf.py +++ /dev/null @@ -1,220 +0,0 @@ -# This file is NOT licensed under the GPLv3, which is the license for the rest -# of YouCompleteMe. -# -# Here's the license text for this file: -# -# This is free and unencumbered software released into the public domain. -# -# Anyone is free to copy, modify, publish, use, compile, sell, or -# distribute this software, either in source code form or as a compiled -# binary, for any purpose, commercial or non-commercial, and by any -# means. -# -# In jurisdictions that recognize copyright laws, the author or authors -# of this software dedicate any and all copyright interest in the -# software to the public domain. We make this dedication for the benefit -# of the public at large and to the detriment of our heirs and -# successors. We intend this dedication to be an overt act of -# relinquishment in perpetuity of all present and future rights to this -# software under copyright law. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -# -# For more information, please refer to - -from sysconfig import get_path -import platform -import os.path as p -import subprocess - -DIR_OF_THIS_SCRIPT = p.abspath( p.dirname( __file__ ) ) -DIR_OF_THIRD_PARTY = p.join( DIR_OF_THIS_SCRIPT, 'third_party' ) -DIR_OF_WATCHDOG_DEPS = p.join( DIR_OF_THIRD_PARTY, 'watchdog_deps' ) -SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ] - -database = None - -# These are the compilation flags that will be used in case there's no -# compilation database set (by default, one is not set). -# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. -flags = [ -'-Wall', -'-Wextra', -'-Werror', -'-Wno-long-long', -'-Wno-variadic-macros', -'-fexceptions', -'-DNDEBUG', -# You 100% do NOT need -DUSE_CLANG_COMPLETER and/or -DYCM_EXPORT in your flags; -# only the YCM source code needs it. -'-DUSE_CLANG_COMPLETER', -'-DYCM_EXPORT=', -'-DYCM_ABSEIL_SUPPORTED', -# THIS IS IMPORTANT! Without the '-x' flag, Clang won't know which language to -# use when compiling headers. So it will guess. Badly. So C++ headers will be -# compiled as C headers. You don't want that so ALWAYS specify the '-x' flag. -# For a C project, you would set this to 'c' instead of 'c++'. -'-x', -'c++', -'-isystem', -'cpp/absl', -'-isystem', -'cpp/pybind11', -'-isystem', -'cpp/whereami', -'-isystem', -'cpp/BoostParts', -'-isystem', -get_path( 'include' ), -'-isystem', -'cpp/llvm/include', -'-isystem', -'cpp/llvm/tools/clang/include', -'-I', -'cpp/ycm', -'-I', -'cpp/ycm/ClangCompleter', -'-isystem', -'cpp/ycm/tests/gmock/googlemock/include', -'-isystem', -'cpp/ycm/tests/gmock/googletest/include', -'-isystem', -'cpp/ycm/benchmarks/benchmark/include', -'-std=c++17', -] - -# Set this to the absolute path to the folder (NOT the file!) containing the -# compile_commands.json file to use that instead of 'flags'. See here for -# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html -# -# You can get CMake to generate this file for you by adding: -# set( CMAKE_EXPORT_COMPILE_COMMANDS 1 ) -# to your CMakeLists.txt file. -# -# Most projects will NOT need to set this to anything; you can just change the -# 'flags' list of compilation flags. Notice that YCM itself uses that approach. -compilation_database_folder = '' - - -def IsHeaderFile( filename ): - extension = p.splitext( filename )[ 1 ] - return extension in [ '.h', '.hxx', '.hpp', '.hh' ] - - -def FindCorrespondingSourceFile( filename ): - if IsHeaderFile( filename ): - basename = p.splitext( filename )[ 0 ] - for extension in SOURCE_EXTENSIONS: - replacement_file = basename + extension - if p.exists( replacement_file ): - return replacement_file - return filename - - -def PathToPythonUsedDuringBuild(): - try: - filepath = p.join( DIR_OF_THIS_SCRIPT, 'PYTHON_USED_DURING_BUILDING' ) - with open( filepath ) as f: - return f.read().strip() - except OSError: - return None - - -def Settings( **kwargs ): - # Do NOT import ycm_core at module scope. - import ycm_core - - global database - if database is None and p.exists( compilation_database_folder ): - database = ycm_core.CompilationDatabase( compilation_database_folder ) - - language = kwargs[ 'language' ] - - if language == 'cfamily': - # If the file is a header, try to find the corresponding source file and - # retrieve its flags from the compilation database if using one. This is - # necessary since compilation databases don't have entries for header files. - # In addition, use this source file as the translation unit. This makes it - # possible to jump from a declaration in the header file to its definition - # in the corresponding source file. - filename = FindCorrespondingSourceFile( kwargs[ 'filename' ] ) - - if not database: - return { - 'flags': flags, - 'include_paths_relative_to_dir': DIR_OF_THIS_SCRIPT, - 'override_filename': filename - } - - compilation_info = database.GetCompilationInfoForFile( filename ) - if not compilation_info.compiler_flags_: - return {} - - # Bear in mind that compilation_info.compiler_flags_ does NOT return a - # python list, but a "list-like" StringVec object. - final_flags = list( compilation_info.compiler_flags_ ) - - # NOTE: This is just for YouCompleteMe; it's highly likely that your project - # does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR - # ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT. - try: - final_flags.remove( '-stdlib=libc++' ) - except ValueError: - pass - - return { - 'flags': final_flags, - 'include_paths_relative_to_dir': compilation_info.compiler_working_dir_, - 'override_filename': filename - } - - if language == 'python': - return { - 'interpreter_path': PathToPythonUsedDuringBuild(), - 'ls': { - 'python': { - 'analysis': { - 'extraPaths': [ - p.join( DIR_OF_THIS_SCRIPT ), - p.join( DIR_OF_THIRD_PARTY, 'bottle' ), - p.join( DIR_OF_THIRD_PARTY, 'regex-build' ), - p.join( DIR_OF_THIRD_PARTY, 'frozendict' ), - p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'jedi' ), - p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'parso' ), - p.join( DIR_OF_WATCHDOG_DEPS, 'watchdog', 'build', 'lib3' ), - p.join( DIR_OF_WATCHDOG_DEPS, 'pathtools' ), - p.join( DIR_OF_THIRD_PARTY, 'waitress' ) - ], - 'useLibraryCodeForTypes': True - } - } - } - } - - return {} - - -def PythonSysPath( **kwargs ): - sys_path = kwargs[ 'sys_path' ] - - sys_path[ 0:0 ] = [ p.join( DIR_OF_THIS_SCRIPT ), - p.join( DIR_OF_THIRD_PARTY, 'bottle' ), - p.join( DIR_OF_THIRD_PARTY, 'regex-build' ), - p.join( DIR_OF_THIRD_PARTY, 'frozendict' ), - p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'jedi' ), - p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'parso' ), - p.join( DIR_OF_WATCHDOG_DEPS, - 'watchdog', - 'build', - 'lib3' ), - p.join( DIR_OF_WATCHDOG_DEPS, 'pathtools' ), - p.join( DIR_OF_THIRD_PARTY, 'waitress' ) ] - - sys_path.append( p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'numpydoc' ) ) - return sys_path