Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Seyro97

#91
El tamaño de una variable de tipo int en memoria depende de cada compilador. Por ejemplo, Las variables de tipo short en mingw me parece que ocupaban 4 bytes, y en el compilador de VS2013 ocupaban 2 bytes (o al revés, no me acuerdo).

Para saber el tamaño de las variables de un cierto tipo, usas algo que se parece a una función: sizeof(tipo o variable) (aunque en realidad no es una función)

Por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>

int main() {
long long variable = 0;

std::cout << "El tipo de variable 'int' ocupa " << sizeof(int) << " bytes" << std::endl;
std::cout << "La variable 'variable' ocupa en memoria RAM " << sizeof(variable) << " bytes" << std::endl;

std::cin.get();
return 0;
}


El resultado saldría (programa compilado en el compilador del VisualStudio 2013):
Código (cpp) [Seleccionar]
El tipo de variable 'int' ocupa 4 bytes
La variable 'variable' ocupa en memoria RAM 8 bytes


A la pregunta que inicialmente se ha preguntado en este "post", no, la variable no se convierte automáticamente en tiempo de ejecución cuando se llena. Lo que hace es castearse. Esto quiere decir que si tu representas el número grande como 01001001001100100001001010101101101100001010010101001010010, y lo intentas guardar en una variable de tamaño 4 bytes (32 bits) (y la de antes ocuparía mas de 2 bytes),  entonces se tomarían los primeros 32 ceros y unos y se les asignaría la memoria: 01001001001100100001001010101101101100001010010101001010010

Lo que está en negrita son los primeros 32 estados, y el resto es información que se pierde. Entonces, es como si asignáramos a la variable el valor 101101101100001010010101001010010 en decimal.

Espero que se entienda :P
#92
Cita de: Eternal Idol en 18 Mayo 2015, 11:04 AM
No, o no habias recompilado o estas ejecutando manualmente una version antigua (compilaste relase x64 y ejecutaste debug x86 por ejemplo) o vaya uno a saber.

A saber xD

Pero juraría no haber hecho nada, y no tengo versiones antiguas. tampoco recompilé xD
#93
Si tienes más dudas, no dudes (XD) en preguntar!
#94
Yo he probado con este código, y funciona:

Código (cpp) [Seleccionar]
cout << "\nEnter New Costumer Name: ";
cin.ignore(); // Esto es lo que añadí
getline(cin, infoCost.name);


Espero que te sirva :P
#95
Hola, muy buenas a tod@s. Hoy tengo una duda sobre como cargar BMP en la RAM para pasarsela a OpenGL. Bueno, se podría decir que casi lo consigo, pero no!. Mejor vean por ustedes mismos el resultado, y a ver si alguien ve el error...

Código (cpp) [Seleccionar]
TEXTURE::TEXTURE(const char *path) {
unsigned char header[54];
unsigned int dataPos;
unsigned int width, height, size;
unsigned char *data;
FILE *filePointer = fopen(path, "rb");

if(filePointer == NULL)
printf_s("Error openning image file at '%s'!", path);

if(!fread(header, 1, 54, filePointer))
printf_s("Error, file at '%s' isn't a real BMP file.", path);

if(header[0] != 'B' || header[1] != 'M')
printf_s("Error, file at '%s' isn't a real BMP file.", path);

dataPos = *(int *)&header[0x0A];
size    = *(int *)&header[0x22];
width   = *(int *)&header[0x12];
height  = *(int *)&header[0x16];

if(!size)
size = width * height * 3;

if(!dataPos)
dataPos = 54;

data = new unsigned char[size];
fread(data, 1, size, filePointer);

fclose(filePointer);

glGenTextures(1, &texID);

glBindTexture(GL_TEXTURE_2D, texID);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

glBindTexture(GL_TEXTURE_2D, 0);
}


Resultado:


Imagen original:


Código del Vertex Shader:
#version 330 core

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 texCoords;

out DATA {
   vec2 texCoords;
} vs_out;

void main() {
   gl_Position = position;

   vs_out.texCoords = texCoords;
}


Código del Fragment Shader:
#version 330 core

layout(location = 0) out vec4 color;

in DATA {
   vec2 texCoords;
} fs_in;

uniform sampler2D sampler;

void main() {
   color = texture(sampler, fs_in.texCoords);
}

Espero que me puedan ayudar... ¡Gracias!




O esto es magia, o visual studio me está trolleando. Ahora si que funciona... Sinceramente, no se que pasaba...
#96
Me respondo a mi mismo: "¡TIENES QUE INICIALIZAR GLEW, DESPISTADO!"

Nota, no he podido eliminar el tema
#97
Hola. Muy buenas a tod@s. Bueno, ya habiendo solucionado el problema con las dependencias, se me presenta otro problema: al ejecutar un programa compilado de un código sencillo, este crashea.

El código es el siguiente:

Código (cpp) [Seleccionar]
#include <iostream>

#include <GL/glew.h>
#include <GLFW/glfw3.h>

static void errorCallback(int error, const char* description) {
std::cout << description << ". Error core: " << error << std::endl;
}

static void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) {
if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}

int main() {
GLFWwindow* window;
GLuint VAO;
GLuint VBO;
GLfloat Vertices[] = {
-0.5f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f
};

glfwSetErrorCallback(errorCallback);

if(!glfwInit())
return -1;

window = glfwCreateWindow(640, 640, "Mi juego", NULL, NULL);

if(!window) {
glfwTerminate();
return -1;
}

glfwMakeContextCurrent(window);
glfwSetKeyCallback(window, keyCallback);

glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glEnable(GL_DEPTH_TEST);

glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(0);

while(!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBindBuffer(GL_ARRAY_BUFFER, VBO);
glDrawArrays(GL_TRIANGLES, 0, 3);

glfwSwapBuffers(window);
glfwPollEvents();
}

glfwDestroyWindow(window);
glfwTerminate();

return 0;
}


Como ya se ha mencionado, el código puede ser compilado sin problemas, pero al ejecutar el .exe correspondiente, crashea (nótese que se abre la ventana en blanco, y justo en ese momento crashea). ¡Gracias por su atención y ayuda!
#98
Lo siento, no se proporcionan códigos. Este subforo fue diseñado para solucionar errores de compilación, ver que problema hay en un código y exponer tutoriales/ejercicios para que los que estén aprendiendo puedan ver esos ejemplos.
#99
Está muy bien tu código, pero te aconsejo que des nombres más descriptivos a las funciones/variables. Por ejemplo, en vez de llamar a la función 'obtenerCuradrado' así, podrías llamarla 'dibujarCuadrado'. Siempre busca nombres que se adecuen mejor a la función que realizan.

¡Sigue así!
#100
El archivo main está guardado como extensión .c (o sea, que está en c) Ahora bien, en un tutorial sobre GLFW encontré la siguiente "frase": 'Callbacks are simply C functions (or C++ static methods)' La verdad, no se a que se refiere. Espero que ustedes lo comprendan :P




Creí que tenía instalado VS2013 a 64 bits, pero resulta que lo tenía a 32... y me descargué GLFW a 64 bits...

¡Muchas gracias por sus respuestas!